package top.jiangqiang.qyblog.core.service;

import top.jiangqiang.qyblog.common.base.response.Result;
import top.jiangqiang.qyblog.core.base.service.BaseService;
import top.jiangqiang.qyblog.core.domain.dto.BlogConfigDto;
import top.jiangqiang.qyblog.core.domain.entity.Config;
import top.jiangqiang.qyblog.core.domain.vo.BlogConfigVo;

import java.util.List;

/**
 * <p>
 * 系统全局配置 服务类
 * </p>
 *
 * @author JiangQiang
 * @since 2023-01-13
 */
public interface IConfigService extends BaseService<Config> {

    /**
     * 获取指定配置名对应的值
     *
     * @param configKey 配置名
     * @return 获取指定配置名对应的值
     */
    <T> T getConfig(String configKey);

    /**
     * 获取相同配置名前缀的值
     *
     * @param configKeyPrefix 可以通过配置名前缀命名规则给配置分组
     * @param <T>
     * @return
     */
    <T> List<T> getConfigs(String configKeyPrefix);

    /**
     * 保存或更新某个key对应的值
     * 如果value是一个对象类型时，会更新该对象所有属性
     *
     * @param configKey   key
     * @param configValue value
     */
    void setConfig(String configKey, Object configValue);

    Result<BlogConfigVo> getBlogConfig();

    Result<String> updateBlogConfig(BlogConfigDto blogConfigDto);
}
